home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / SYMBOL / Neurons / feedback-neuron < prev    next >
Lisp/Scheme  |  1998-10-23  |  2KB  |  36 lines

  1. feedback-neuron name n list-of-input-patterns
  2.  
  3. feedback-neuron applies first the list-of-input-patterns to a neuron, and then feeds the output of this neuron back to itself. The iteration is repeated n times, and the output is returned as a list of lists, in succession of the neural outputs at each iteration.
  4.  
  5. If you have a single input neurons, call feedback-neuron this way:
  6.  
  7. (setq results 
  8.    (feedback-neuron 'rules 5 (list source)))
  9.  
  10. Depending on the how many inputs the neuron is processing, you should supply that amount of inputs, for example if 'rules have 3 inputs, you should supply the initial neuron inputs in the following way:
  11.  
  12. (setq results 
  13.    (feedback-neuron 'rules 5 (list nil nil source)))
  14. ;                                  in1 in2  in3
  15.  
  16. What happens when you feedback a neuron with multiple inputs. In the feedback process, the neuron processes the following inputs, and adds the output to a input 3.
  17.  
  18. ; ITERATIONS    INPUTS                  OUTPUT
  19. ;               1      2      3
  20. ; 1             nil    nil    chunk1    --> out1
  21. ; 2             nil    chunk1 out1      --> out2
  22. ; 3             chunk1 out1   out2      --> out3
  23. ; 4             out1   out2   out3      --> out4
  24. ; 5             out2   out3   out4      --> out5
  25.  
  26. If you examine the process, you'll notice it is the same procedure as when one is writing fugues or canons for 4 instruments. The resulting machinery is actually a kind of cellular automata, reacting to previous stages and producing new forms based on a set of rules.
  27.  
  28. (defun feedback-neuron (name n inputs)
  29.   (let ((out nil) (collect nil))
  30.     (dotimes (i n)
  31.       (setq out (apply 'run-neuron (append (list name) inputs)))
  32.       (push out collect)
  33.       (setq inputs (append (cdr inputs) (list out))))
  34.     (nreverse collect)))
  35.  
  36.